package com.ynwt.util;

import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;

/**
 * Created by huangying on 2017/5/7.
 */
public class FileUtil {


    /**
     * 返回指定目录下有指定前缀文件夹数量
     * @param dir 指定的文件夹
     * @param prefix 指定的前缀
     * @return 文件或文件夹个数（如果dir不是文件夹，返回-1）
     */
    public static int totalSonDirByFixedPrefix(File dir, String prefix) {
        if (!dir.isDirectory()) {
            return -1;
        } else {
            File[] arr = dir.listFiles(new FileFilter() {
                int length = prefix.length();
                @Override
                public boolean accept(File pathname) {
                    if (pathname.isDirectory() && pathname.getName().length() >= length && prefix.equals(pathname.getName().substring(0, length)))
                        return true;
                    else
                        return false;
                }
            });
            return arr.length;
        }
    }

    /**
     * 返回指定目录下有指定前缀的文件或文件夹数量
     * @param dir 指定的文件夹
     * @param prefix 指定的前缀
     * @return 文件或文件夹个数（如果dir不是文件夹，返回-1）
     */
    public static int totalSonByFixedPrefix(File dir, String prefix) {
        if (!dir.isDirectory()) {
            return -1;
        } else {
            String[] arr = dir.list(new FilenameFilter() {
                int length = prefix.length();
                @Override
                public boolean accept(File dir, String name) {
                    if (name.length() >= length && prefix.equals(name.substring(0, length)))
                        return true;
                    else
                        return false;
                }
            });
            return arr.length;
        }
    }

    /**
     * 返回指定目录下有指定前缀的文件数量
     * @param dir 指定的文件夹
     * @param prefix 指定的前缀
     * @return 文件或文件夹个数（如果dir不是文件夹，返回-1）
     */
    public static int totalSonFileByFixedPrefix(File dir, String prefix) {
        if (!dir.isDirectory()) {
            return -1;
        } else {
            File[] arr = dir.listFiles(new FileFilter() {
                int length = prefix.length();
                @Override
                public boolean accept(File pathname) {
                    if (pathname.isFile() && pathname.getName().length() >= length && prefix.equals(pathname.getName().substring(0, length)))
                        return true;
                    else
                        return false;
                }
            });
            return arr.length;
        }
    }

//    private class SonFileByFixedPrefixFilter implements FileFilter {
//        private File dir;
//        private String prefix;
//        private int prefixLength;
//
//        public SonFileByFixedPrefixFilter(File dir, String prefix) {
//            this.dir = dir;
//            this.prefix = prefix;
//            this.prefixLength = prefix.length();
//        }
//        @Override
//        public boolean accept(File pathname) {
//            if (pathname.isFile() && pathname.getName().length() >= prefixLength && prefix.equals(pathname.getName().substring(0, prefixLength)))
//                return true;
//            else
//                return false;
//        }
//    }
}
